home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / enviro.zip / ENVIRON.PAS < prev    next >
Pascal/Delphi Source File  |  1993-01-04  |  3KB  |  101 lines

  1. {
  2.   Turbo Pascal Ver 4.0 Unit
  3.   Written Dec 1, 1987
  4.   Programmer: Bob Landry 73300,1717
  5.  
  6.     This Unit is used for reading the environment passed to a program. The
  7.   variable 'EnvCount' will contain the total number of environment variables
  8.   passed while 'RunFile' is a string containing the complete drive, path,
  9.   and filename specification for the program which is using this unit.
  10.     The function 'EnvironStr' will return an environment variable string for
  11.   'StrNo'. 'StrNo' must be in the range 1 to 'EnvCount' otherwise 'EnvironStr'
  12.   returns a NULL string.
  13. }
  14.  
  15. Unit Environ;
  16.  
  17. Interface
  18. Var
  19.    EnvCount : Integer;
  20.    RunFile  : String;
  21.  
  22. Function EnvironStr(StrNo : Integer) : String;
  23.  
  24. Implementation
  25. Var
  26.    EnvBase     : ^Word;
  27.    EnvPtr      : ^Char;
  28.    Environment : String;
  29.    ZeroCount   : Integer;
  30.    CharsCnt    : Integer;
  31.    L           : Integer;
  32.  
  33.  
  34. Function EnvironStr( StrNo : Integer ) : String;
  35. begin
  36.      If (StrNo < 1) or (StrNo > EnvCount) then
  37.      begin
  38.         EnvironStr := '';
  39.         exit
  40.      end;
  41.  
  42.      Dec(StrNo);
  43.      EnvBase := Ptr(PrefixSeg,$2C);
  44.      CharsCnt := 0;
  45.  
  46.      While StrNo <> 0 do
  47.      begin
  48.           EnvPtr := Ptr(EnvBase^,CharsCnt);
  49.           While EnvPtr^ <> #0 do
  50.           begin
  51.                EnvPtr := Ptr(EnvBase^,CharsCnt);
  52.                Inc(CharsCnt)
  53.           end;
  54.           Dec(StrNo)
  55.      end;
  56.      L := 0;
  57.      EnvPtr := Ptr(EnvBase^,CharsCnt);
  58.      While EnvPtr^ <> #0 do
  59.      begin
  60.           Inc(L);
  61.           EnvironStr[L] := EnvPtr^;
  62.           Inc(CharsCnt);
  63.           EnvPtr := Ptr(EnvBase^,CharsCnt);
  64.      end;
  65.      EnvironStr[0] := chr(L);
  66. end; { End Function EnvironStr }
  67.  
  68. Begin
  69.      ZeroCount := 0;
  70.      EnvBase   := Ptr(PrefixSeg,$2C);
  71.      EnvCount  := 0;
  72.      L         := 0;
  73.  
  74.  
  75.      CharsCnt := 0;
  76.      While ZeroCount < 2 do
  77.      begin
  78.           EnvPtr := Ptr(EnvBase^,CharsCnt);
  79.           While EnvPtr^ <> #0 do
  80.           begin
  81.                ZeroCount := 0;
  82.                Inc(CharsCnt);
  83.                EnvPtr := Ptr(EnvBase^,CharsCnt);
  84.           end;
  85.           If ZeroCount = 0 then
  86.              Inc(EnvCount);
  87.           Inc(ZeroCount);
  88.           Inc(CharsCnt);
  89.      end;
  90.      Inc(CharsCnt,2);
  91.      EnvPtr := Ptr(EnvBase^,CharsCnt);
  92.      While EnvPtr^ <> #0 do
  93.      begin
  94.           Inc(L);
  95.           RunFile[L] := EnvPtr^;
  96.           Inc(CharsCnt);
  97.           EnvPtr := Ptr(EnvBase^,CharsCnt);
  98.      end;
  99.      RunFile[0] := chr(L);
  100. end. { End Unit Environ }
  101.